git 的简单介绍

git 的简单介绍

是什么?

Git 是目前世界上最先进的分布式版本控制系统。

为什么

  • 适合分布式开发
  • 速度快,灵活
  • 优秀的解决冲突能力
  • 版本管理

工作流程

  1. 克隆项目
  2. 修改项目
  3. 提交更改
  4. 拉取远端最新的更改(如果别人在你修改期间有更改推送过,则需要拉取)
  5. 如本地修改跟远端修改有冲突,则解决冲突
  6. 重新提交
  7. 推送远端

    对应流程图如下:
    201609291518243574.png

常用命令

  • git init
    用于初始化项目
  • git clone
    用于克隆项目
  • git add
    添加修改文件。
    其中 git add .代表添加所有修改过的问题件,git add 文件路径,代表添加特定的文件。
  • git commit
    提交更改日志,例如 git commit -m “增加功能”
  • git fetch
    检查远端是否有更改
  • git pull
    拉取远端的最新的代码,例如 git pull –rebase.
    rebase 和 merge 的区别在于:merge 操作会生成一个新的节点,之前的提交分开显示。而 rebase 操作不会生成新的节点,是将两个分支融合成一个线性的提交。
    所以我们通常 git pull 都会加上 rebase 的参数
  • git push
    推送本地更改到服务器,例如 git push orgin master
  • git branch
    查看当前分支,而如果加上-r 参数,代表查看远程分支 git branch -r
  • git checkout
    切换分支 例如,git checkout -b develop,切换到 develop 分支,如果本地已经有 develop 分支,则 git checkout develop
  • git tag
    为节点打日志,例如,我们要为 1b2e1d63ff 打上 1.0 的标签:git tag 1.0 1b2e1d63ff
  • git reset
    丢弃所有的本地所有的更改,git reset HEAD –hard,同时也可以用此命令回到之前的节点,如果我要返回到上一个节点(注意,此返回指的是你本地返回,而不是远端返回),git reset HEAD^ –hard
  • git status
    查看本地缓存修改记录

常用技巧

现在有 a、b、c、d、e,5 个提交点,我需要切换回滚到 c 节点,丢弃的 d,e 节点

git reset HEAD^^ --hard(或者 git reset c 点的 sha 码 --hard)
git push origin HEAD --force

把别的分支某个提交点提交到当前分支

例如 develop 上有提交点 a(sha 码为 1b2e1d63ff),需要把 a 也提交到 master 上去.

git checkout master
git cherry-pick -x 1b2e1d63ff,-x 代表着保留原始作者信息

如果途中产生冲突,则按照标准的解决冲突方法去解决。然后重新 commit 即可

查找某个文件的某行修改记录

新接手了一个项目,里面某一行代码不知道为什么原作者这样写,需要查看对应的提交点记录才能知道为啥当初这样写
例如要查看 a.java 文件的修改记录

git blame **/a.java(注意文件路径),得到如下结果
1
2
3
4
5
6
7
8
9
10
^5cdd7bd (Rinfon 2018-04-02 13:14:34 +0800  68)     LocalTextView apStepBack;
^5cdd7bd (Rinfon 2018-04-02 13:14:34 +0800 69) @BindView(R.id.ap_step_next)
^5cdd7bd (Rinfon 2018-04-02 13:14:34 +0800 70) LocalTextView apStepNext;
20997902 (Rinfon 2018-06-25 12:03:13 +0800 71) @BindView(R.id.ap_step_three_icon)
20997902 (Rinfon 2018-06-25 12:03:13 +0800 72) ImageView apStepThreeIcon;
20997902 (Rinfon 2018-06-25 12:03:13 +0800 73) @BindView(R.id.wifi_remember)
20997902 (Rinfon 2018-06-25 12:03:13 +0800 74) CheckBox wifiRemember;
20997902 (Rinfon 2018-06-25 12:03:13 +0800 75) @BindView(R.id.ap_step_btn_layout)
20997902 (Rinfon 2018-06-25 12:03:13 +0800 76) LinearLayout apStepBtnLayout;
^5cdd7bd (Rinfon 2018-04-02 13:14:34 +0800 77) private Unbinder unbinder;

这时候已经得到了 sha 码,就可以通过 git show 20997902,可以得到修改的信息。

分支管理

主要分支

  • master 分支。仅且只有一个主分支,用于提供正式版本
  • develop 分支,开发分支,用于日常开发,如果一个版本开发完整,测试通过,则合并到 develop 里面去。合并的时候需要加上 –no-ff,快进式合并,保证版本的演进清晰。
    临时分支
  • feature 分支,当需要做一个新功能时,需要基于 develop 开一个 feature 分支,即使 feature 不完成,也不会影响 develop 的进度.
  • hotfix 分支,用于修改 bug 的分支,基于 master 分出来的。修改结束后,合并到 master 和 develop 上去

    但这只是一个基础想法,并不是适用于所有的项目的,而我们需要做的,就是对此策略加以修改,变成适合自己的分支管理。

-------------本文结束感谢您的阅读-------------
您的支持将是我最大的动力